home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / T U R B O Language / Turbo C v2.0 / INCLUDE / DOS.H < prev    next >
Text File  |  1988-08-29  |  8KB  |  252 lines

  1. /*    dos.h
  2.  
  3.     Defines structs, unions, macros, and functions for dealing
  4.     with MSDOS and the Intel iAPX86 microprocessor family.
  5.  
  6.     Copyright (c) Borland International 1987,1988
  7.     All Rights Reserved.
  8. */
  9. #if __STDC__
  10. #define _Cdecl
  11. #else
  12. #define _Cdecl    cdecl
  13. #endif
  14.  
  15. #if     !defined(__DOS_DEF_)
  16. #define __DOS_DEF_
  17.  
  18. /* Variables */
  19. extern    int        _Cdecl _8087;
  20. extern    int        _Cdecl _argc;
  21. extern    char          **_Cdecl _argv;
  22. extern    char          **_Cdecl  environ;
  23. extern    int        _Cdecl _doserrno;
  24. extern    unsigned    _Cdecl _heaplen;
  25. extern    unsigned char    _Cdecl _osmajor;
  26. extern    unsigned char    _Cdecl _osminor;
  27. extern    unsigned     _Cdecl _psp;
  28. extern    unsigned    _Cdecl _stklen;
  29. extern    unsigned     _Cdecl _version;
  30.  
  31. #define FA_RDONLY    0x01        /* Read only attribute */
  32. #define FA_HIDDEN    0x02        /* Hidden file */
  33. #define FA_SYSTEM    0x04        /* System file */
  34. #define FA_LABEL    0x08        /* Volume label */
  35. #define FA_DIREC    0x10        /* Directory */
  36. #define FA_ARCH        0x20        /* Archive */
  37.  
  38. #define NFDS    20            /* Maximum number of fds */
  39.  
  40. struct    fcb    {
  41.     char    fcb_drive;        /* 0 = default, 1 = A, 2 = B */
  42.     char    fcb_name[8];        /* File name */
  43.     char    fcb_ext[3];        /* File extension */
  44.     short    fcb_curblk;        /* Current block number */
  45.     short    fcb_recsize;        /* Logical record size in bytes */
  46.     long    fcb_filsize;        /* File size in bytes */
  47.     short    fcb_date;        /* Date file was last written */
  48.     char    fcb_resv[10];        /* Reserved for DOS */
  49.     char    fcb_currec;        /* Current record in block */
  50.     long    fcb_random;        /* Random record number */
  51. };
  52.  
  53. struct    xfcb    {
  54.     char        xfcb_flag;    /* Contains 0xff to indicate xfcb */
  55.     char        xfcb_resv[5];    /* Reserved for DOS */
  56.     char        xfcb_attr;    /* Search attribute */
  57.     struct    fcb    xfcb_fcb;    /* The standard fcb */
  58. };
  59.  
  60. struct    country {
  61.     int    co_date;
  62.     char    co_curr[5];
  63.     char    co_thsep[2];
  64.     char    co_desep[2];
  65.     char    co_dtsep[2];
  66.     char    co_tmsep[2];
  67.     char    co_currstyle;
  68.     char    co_digits;
  69.     char    co_time;
  70.     long    co_case;
  71.     char    co_dasep[2];
  72.     char    co_fill[10];
  73. };
  74.  
  75. struct    DOSERROR {
  76.     int    exterror;
  77.     char    class;
  78.     char    action;
  79.     char    locus;
  80. };
  81.  
  82. struct    dfree    {
  83.     unsigned df_avail;
  84.     unsigned df_total;
  85.     unsigned df_bsec;
  86.     unsigned df_sclus;
  87. };
  88.  
  89. struct    fatinfo {
  90.     char    fi_sclus;
  91.     char    fi_fatid;
  92.     int    fi_nclus;
  93.     int    fi_bysec;
  94. };
  95.  
  96. struct    devhdr    {
  97.     long        dh_next;    /* Next device pointer */
  98.     short        dh_attr;    /* Attributes */
  99.     unsigned short    dh_strat;    /* Driver strategy routine */
  100.     unsigned short    dh_inter;    /* Driver interrupt routine */
  101.     char        dh_name[8];    /* Device name */
  102. };
  103.  
  104. struct    time    {
  105.     unsigned char    ti_min;        /* Minutes */
  106.     unsigned char    ti_hour;    /* Hours */
  107.     unsigned char    ti_hund;    /* Hundredths of seconds */
  108.     unsigned char    ti_sec;        /* Seconds */
  109. };
  110.  
  111. struct    date    {
  112.     int        da_year;    /* Year - 1980 */
  113.     char        da_day;        /* Day of the month */
  114.     char        da_mon;        /* Month (1 = Jan) */
  115. };
  116.  
  117. struct WORDREGS {
  118.     unsigned int    ax, bx, cx, dx, si, di, cflag, flags;
  119. };
  120.  
  121. struct BYTEREGS {
  122.     unsigned char    al, ah, bl, bh, cl, ch, dl, dh;
  123. };
  124.  
  125. union    REGS    {
  126.     struct    WORDREGS x;
  127.     struct    BYTEREGS h;
  128. };
  129.  
  130. struct    SREGS    {
  131.     unsigned int    es;
  132.     unsigned int    cs;
  133.     unsigned int    ss;
  134.     unsigned int    ds;
  135. };
  136.  
  137. struct    REGPACK {
  138.     unsigned    r_ax, r_bx, r_cx, r_dx;
  139.     unsigned    r_bp, r_si, r_di, r_ds, r_es, r_flags;
  140. };
  141.  
  142. #define FP_OFF(fp)    ((unsigned)(fp))
  143. #define FP_SEG(fp)    ((unsigned)((unsigned long)(fp) >> 16))
  144.  
  145.  
  146. typedef struct {
  147.     char    drive;        /* do not change    */
  148.     char    pattern [13];    /*  these fields,    */
  149.     char    reserved [7];    /*   Microsoft reserved */
  150.     char    attrib;
  151.     short    time;
  152.     short    date;
  153.     long    size;
  154.     char    nameZ [13];    /* result of the search, asciiz */
  155. }    dosSearchInfo;    /* used with DOS functions 4E, 4F    */
  156.  
  157.  
  158. int     _Cdecl absread    (int drive, int nsects, int lsect, void *buffer);
  159. int     _Cdecl abswrite(int drive, int nsects, int lsect, void *buffer);
  160. int     _Cdecl allocmem(unsigned size, unsigned *segp);
  161. int     _Cdecl bdos    (int dosfun, unsigned dosdx, unsigned dosal);
  162. int     _Cdecl bdosptr    (int dosfun, void *argument, unsigned dosal);
  163. struct    country *_Cdecl country    (int xcode, struct country *cp);
  164. void     _Cdecl ctrlbrk    (int _Cdecl (*handler)(void));
  165. void     _Cdecl delay    (unsigned milliseconds);
  166. void     _Cdecl disable    (void);
  167. int     _Cdecl dosexterr    (struct DOSERROR *eblkp);
  168. long     _Cdecl dostounix    (struct date *d, struct time *t);
  169. void          __emit__();
  170. void     _Cdecl enable    (void);
  171. int     _Cdecl freemem    (unsigned segx);
  172. int     _Cdecl getcbrk    (void);
  173. void     _Cdecl getdate    (struct date *datep);
  174. void     _Cdecl getdfree(unsigned char drive, struct dfree *dtable);
  175. void     _Cdecl getfat    (unsigned char drive, struct fatinfo *dtable);
  176. void     _Cdecl getfatd    (struct fatinfo *dtable);
  177. unsigned _Cdecl getpsp    (void);
  178. int     _Cdecl getswitchar    (void);
  179. void     _Cdecl gettime    (struct time *timep);
  180. void    interrupt     (* _Cdecl getvect(int interruptno)) ();
  181. int     _Cdecl getverify    (void);
  182. void     _Cdecl harderr    (int _Cdecl (*handler)());
  183. void     _Cdecl hardresume    (int axret);
  184. void     _Cdecl hardretn(int retn);
  185. int     _Cdecl inport    (int portid);
  186. unsigned char    _Cdecl inportb(int portid);
  187. int     _Cdecl int86    (int intno, union REGS *inregs, union REGS *outregs);
  188. int     _Cdecl int86x    (int intno, union REGS *inregs, union REGS *outregs,
  189.              struct SREGS *segregs);
  190. int     _Cdecl intdos    (union REGS *inregs, union REGS *outregs);
  191. int     _Cdecl intdosx    (union REGS *inregs, union REGS *outregs,
  192.              struct SREGS *segregs);
  193. void     _Cdecl intr    (int intno, struct REGPACK *preg);
  194. void     _Cdecl keep    (unsigned char status, unsigned size);
  195. void      _Cdecl nosound    (void);
  196. void     _Cdecl outport    (int portid, int value);
  197. void     _Cdecl outportb(int portid, unsigned char value);
  198. char    *_Cdecl parsfnm    (const char *cmdline, struct fcb *fcb, int opt);
  199. int     _Cdecl peek    (unsigned segment, unsigned offset);
  200. char     _Cdecl peekb    (unsigned segment, unsigned offset);
  201. void     _Cdecl poke    (unsigned segment, unsigned offset, int value);
  202. void     _Cdecl pokeb    (unsigned segment, unsigned offset, char value);
  203. int     _Cdecl randbrd    (struct fcb *fcb, int rcnt);
  204. int     _Cdecl randbwr    (struct fcb *fcb, int rcnt);
  205. void     _Cdecl segread    (struct SREGS *segp);
  206. int     _Cdecl setblock(unsigned segx, unsigned newsize);
  207. int     _Cdecl setcbrk    (int cbrkvalue);
  208. void     _Cdecl setdate    (struct date *datep);
  209. void     _Cdecl setswitchar    (char ch);
  210. void     _Cdecl settime    (struct time *timep);
  211. void     _Cdecl setvect    (int interruptno, void interrupt (*isr) ());
  212. void     _Cdecl setverify    (int value);
  213. void     _Cdecl sleep    (unsigned seconds);
  214. void      _Cdecl sound    (unsigned frequency);
  215. void     _Cdecl unixtodos    (long time, struct date *d, struct time *t);
  216. int     _Cdecl    unlink    (const char *path);
  217.  
  218.     /* These are in-line functions.  These prototypes just clean up
  219.        some syntax checks and code generation.
  220.      */
  221.  
  222. void    _Cdecl    __cli__        (void);
  223. void    _Cdecl    __sti__        (void);
  224. unsigned char _Cdecl __inportb__(int portid);
  225. void    _Cdecl    __outportb__    (int portid, unsigned char value);
  226. void    _Cdecl    __int__        (int interruptnum);
  227.  
  228. #define disable()    __cli__()        /* Clear interrupt flag */
  229. #define enable()    __sti__()        /* Set interrupt flag */
  230. #define inportb(portid) __inportb__(portid)    /* Byte IN instruction */
  231. #define outportb(portid, v) __outportb__(portid,v)/* Byte OUT instruction */
  232. #define geninterrupt(i) __int__(i)        /* Interrupt instruction */
  233.  
  234. /* some other compilers use inp, outp for inportb, outportb */
  235. #define inp(portid)    inportb(portid)
  236. #define outp(portid,v)    outportb(portid,v)
  237.  
  238. #if !__STDC__
  239. char far *cdecl getdta(void);
  240. void      cdecl setdta(char far *dta);
  241.  
  242. #define MK_FP(seg,ofs)    ((void far *) \
  243.                (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
  244.  
  245. #define poke(a,b,c)    (*((int  far*)MK_FP((a),(b))) = (int)(c))
  246. #define pokeb(a,b,c)    (*((char far*)MK_FP((a),(b))) = (char)(c))
  247. #define peek(a,b)    (*((int  far*)MK_FP((a),(b))))
  248. #define peekb(a,b)    (*((char far*)MK_FP((a),(b))))
  249. #endif
  250.  
  251. #endif
  252.